home *** CD-ROM | disk | FTP | other *** search
/ Belgian Amiga Club - ADF Collection / BS1 part 26.zip / BS1 part 26 / Disk Of The Month 26.adf / Doc-Files / Utilities.Doc < prev    next >
Text File  |  1988-06-19  |  52KB  |  1,142 lines

  1.  
  2. Utilities Docs
  3. This file includes Documentation for all files in the Utilities Drawer. They 
  4. have all been combined into one to save disk space.
  5.  
  6. The Docs included in this file are:
  7. Spread
  8. MemoPad
  9. DWIP
  10. KeyClick
  11. Doc File Headers are in RED!
  12.  
  13. *****************************************************************************
  14.  
  15.  
  16.     SPREAD - Tiny Amiga spreadsheet
  17.     Spread history (as if you care):
  18.  
  19.     This program grew from a notion I had, 4 years ago, that a
  20. spreadsheet would be a good tool to have, to help with certain jobs at
  21. the office. I had read about VisiCalc, and later Lotus 1-2-3, but I had
  22. never used a spreadsheet, so I designed Spread with few pre-conceived
  23. notions about how it should work. As far as I know, Spread bears little
  24. resemblance to any other spreadsheet.
  25.  
  26.     The first version of Spread was written to run on a PDP-11
  27. running RT11 or TSX, with a VT220 terminal. It was written in Decus C,
  28. it only supported fixed-12-character columns, and only what the screen
  29. could display. It was later enhanced to support a larger worksheet with
  30. scrolling, and to support a 132 column display. Spread is still used at
  31. the office almost use daily.
  32.  
  33.     When I found myself dialing in to work from my Amiga to use
  34. Spread fairly often (a long distance phone call too), I decided it was
  35. time to port the program over to the Amiga.
  36.  
  37.     The PDP-11 Spread used VT220 display controls and accepted VT220
  38. function keys. These are not completely compatible with the features of
  39. the Amiga CON: device, so I decided to re-write the user interface to
  40. make best use of the Intuition's input and output features.
  41.  
  42.     I started work on the Amiga version in early January 1988, and
  43. spent most evenings and weekends at the keyboard (my wife hated it). You
  44. have the result before you.
  45.  
  46.     Amiga Spread supports a few features the PDP11 version doesn't,
  47. specifically the ability of a text cell to overlay empty cells to the
  48. right, the ability to set the column width and decimals, it supports a
  49. larger worksheet (The PDP version must run in only 56K!), and of course
  50. the Intuition interface.
  51.  
  52.     Spread features:
  53.  
  54.     o Small 36 X 60 worksheet
  55.     o Four basic math functions, plus row and column summing
  56.     o Intuition-ized user interface
  57.     o Resizable Workbench window
  58.     o Absolute and symbolic cell references in formulas
  59.     o Worksheet editing: insert/delete row, insert/delete column
  60.     o Cell editing: cut, copy, paste, erase single cells
  61.     o Variable column width and decimal places
  62.     o Automatic or Manual recalculation
  63.  
  64.     Running Spread:
  65.  
  66.     Spread can be invoked from the CLI or launched from a Workbench
  67. icon. If launched from the Workbench, the Lattice C startup code will
  68. first open a standard input/output window, which Spread ignores. It is
  69. recommended that Spread be given a stack size of 8000. A larger stack
  70. size provides no benefit.
  71.  
  72.     If Spread is run from the CLI, you can include a command
  73. parameter specifying the name of a file which Spread will load as the
  74. current spreadsheet.
  75.  
  76.     The Spread window gives a display of (r) rows and (n) columns.
  77. The number of rows and columns depends on the current size of the
  78. display window, the width of the individual columns, and the narrow/wide
  79. font selection. The intersection of each line and column is called a
  80. cell. Cells may be empty, or they may contain text, or they may contain
  81. a formula.
  82.  
  83.     Spread currently supports 60 rows and 36 columns. This is very
  84. small by commercial product standards.
  85.  
  86.     In the window, one cell is displayed in reverse; this indicates
  87. the 'cursor'. The cursor may be moved using the arrow keys, or by
  88. pointing to a cell with the mouse pointer and clicking.
  89.  
  90.     If a movement would place the cursor on a cell which is not in
  91. the display window, the display is scrolled. The horizontal and vertical
  92. scroll bars also move the display window and the cursor.
  93.  
  94.     If a cell contains text, then the text is displayed in the
  95. window in that cell. If the text is wider than the current column's
  96. width, then the text will 'overflow' into empty cells to the right of
  97. the selected cell. If the text is so long that it would overflow into a
  98. cell that is occupied, then the text is truncated at that point.
  99.  
  100.     If a cell contains a formula, then the result of the formula is
  101. displayed in the cell in the window. Calculations are double precision
  102. floating point. The number display is initially 2 decimal places.
  103.  
  104.     The contents of a formula cell is a string in simple algebraic
  105. notation. It is evaluated according to the following rules:
  106. Multiplication ('*'), division ('/'), and modulo ('%') are performed
  107. first, from left to right; then addition ('+') and subtraction ('-')
  108. from left to right; then MAX and MIN left to right; then conditionals
  109. from left to right. The order of evauation can be forced by the use of
  110. parentheses.
  111.  
  112.     If you want a cell to simply contain a number, then make it a
  113. formula cell, and type in the number you want as the formula.
  114.  
  115.     Formula cells may be given logical names. The names can be
  116. referred to in other cells' formulas to call the value from the cell;
  117. this allows cell position changes within the display without affecting
  118. the logical sources for values in formulas. Only formula cells may be
  119. given names. The name must begin with a letter, and may contain
  120. letters and numbers. It may not contain spaces.
  121.  
  122.     Cell editing (text, formula, or name) is done in the string
  123. gadgets at the bottom of the window.
  124.  
  125.     When the cursor is on an empty cell, the entry gadgets at the
  126. bottom of the window are ghosted and cannot be selected. The "Cells"
  127. menu allows the choice of either a text cell or a formula cell. If
  128. "Cells/Edit Text cell" or "Cells/Edit Formula Cell" is chosen, then the
  129. cell type is chosen, the text gadget is enabled and activated, and the
  130. text may be entered immediately.
  131.  
  132.     When the cursor is on a text cell, the cell's text is placed in
  133. the text gadget. This gadget can be selected and the text modified.
  134.  
  135.     When the cursor is on a formula cell, the cell's formula and
  136. name are placed in the text and name gadgets. These can be selected and
  137. modified.
  138.  
  139.     If you wish to change a text cell to a forumla cell or vice
  140. versa, you must erase the current cell and define it anew. The menu
  141. entries "Edit/Cut" or "Edit/Erase" will erase the contents of a cell.
  142.  
  143.     Calculation can be set to automatic or manual. In automatic
  144. mode, whenever a formula cell is edited or any change which may effect
  145. the numeric results of other cells is performed, recalculation takes
  146. place. In manual mode, recalculation is done when the "Calculate/
  147. Evaluate" menu entry is selected, when the user presses the 'C' key, and
  148. upon loading a new spreadsheet from disk, and no other time.
  149.  
  150.     Calculation is done as follows: Each formula in the spreadsheet
  151. is solved, starting in cell R0C0 and moving down, then repeating for
  152. successive columns moving right. Cells which depend on other cells'
  153. values should be placed under or to the right of the cells which supply
  154. the values.
  155.  
  156.     If a cell must make a 'forward' reference, to a cell which will
  157. be calculated later in the spreadsheet, then calculating twice will
  158. usually result in the correct value.
  159.  
  160.     If a calculation can't be performed, the cell will display asterisks
  161. ('****.**') instead of a number. You should inspect your formula to see
  162. what is wrong. You may have left your parentheses unbalanced, or perhaps
  163. you refer to a cell name that you haven't defined. 
  164.  
  165.     Formulas
  166.  
  167.     Formulas are algebraic expressions similar to FORTRAN or BASIC
  168. expressions. Operations proceed left to right, according heirarchy
  169. (multiplication after addition, etc). Expressions may be grouped with
  170. parentheses.
  171.  
  172.     Values are included in an expression using the following
  173. notations:
  174.  
  175.     <value>    - a number, like '10', '-5', '2.34'
  176.     RmCn    - takes the value in the cell at row (m) column (n)
  177.           Special case, either (m) or (n) can be '.', which
  178.           means to use the current row/column
  179.     name    - takes the value in the cell with the given name.
  180.  
  181.     The following arithmetic operators are provided:
  182.  
  183.     +    Addition                p + q
  184.     -    Subtraction                p - q
  185.     *    Multiplication                p * q
  186.     /    Division                p / q
  187.     %    Modulo (remainder from division)    p % q
  188.     MAX    greater of two values            p MAX q
  189.     MIN    lesser of two values            p MIN q
  190.  
  191.     -    Negate                    -p
  192.     ABS    Absolute value                ABS(p), ABS p
  193.     INT    Extract integer portion            INT(p), INT p
  194.  
  195.     SUM    Sum of all cells in a row or column above/to the left of
  196.         the current cell. SUM's format:
  197.  
  198.         SUM(RmCn)
  199.  
  200.         'm' and 'n' can be:
  201.             a row/column number
  202.             '.' to specify the current row/column
  203.             '*' to specify all the rows/columns above/to
  204.                 the left
  205.         Any of the above formats for 'row' and 'col' can be
  206.         combined except R*C*, which is invalid.
  207.  
  208.     Conditional Binary operators; these are entered as binary
  209. operators (one operand on each side) and give the second operand if the
  210. conditional test on the first operand is true, otherwise they give zero:
  211.  
  212.     ?EQ    op = 0            7 ?EQ 3 = 0    0 ?EQ 3 = 3
  213.     ?NE    op not = 0        7 ?NE 3 = 3    0 ?NE 3 = 0    
  214.     ?GT    op greater than 0    7 ?GT 3 = 3    -7 ?GT 3 = 0
  215.     ?GE    op greater or equal 0    7 ?GE 3 = 3    -7 ?GE 3 = 0
  216.     ?LT    op less than 0        7 ?LT 3 = 0    -7 ?LT 3 = 3
  217.     ?LE    op less or equal 0    7 ?LE 3 = 0    -7 ?LE 3 = 3
  218.  
  219.  
  220.     Spread menu selections:
  221.  
  222.     "Project" Menu
  223.  
  224.     "Project/New": Erases the entire contents of the current
  225. spreadsheet.
  226.  
  227.     "Project/Load": Erases the entire contents of the current
  228. spreadsheet, then loads a previously-saved spreadsheet. This brings up a
  229. requester asking for the name of the file to load.
  230.  
  231.     "Project/Save": Saves the current spreadsheet into a file.
  232. Project/Save uses the same file name as the spreadsheet that was loaded,
  233. or if no file name has been specified, it puts up a requester asking for
  234. the name of the file to save to.
  235.  
  236.     "Project/Save as..": saves the current spreadsheet into a file.
  237. This puts up a requester asking for the name of the file to save to.
  238.  
  239.     "Project/Print": prints to a file a displayable image of the
  240. current spreadsheet. This puts up a requester asking for the name of the
  241. file to print to, which can be "PRT:" to print directly to the printer.
  242. (Note: background printing is not implemented, meaning that Spread will
  243. stall until the spreadsheet had been printed entirely.)
  244.  
  245.     "Project/About Spread": Try it and see.
  246.  
  247.     "Project/Quit": Leaves Spread. If a spreadsheet is loaded it
  248. will be lost; make sure you save it first if you want to keep it. The
  249. close window button in the upper left corner performs the same function.
  250.  
  251.     "Edit" Menu
  252.  
  253.     "Edit/Cut": The current cell is saved in the paste buffer, and
  254. becomes empty. (The 'current' cell is the cell the cursor is positioned
  255. on, which is displayed in reverse.)
  256.  
  257.     "Edit/Copy": The current cell is saved in the paste buffer. The
  258. current cell is not altered.
  259.  
  260.     "Edit/Paste": If the current cell is empty, then the contents of
  261. the paste buffer is placed in the current cell.
  262.  
  263.     "Edit/Erase": The current cell is made empty. It is not saved in
  264. the paste buffer, and the paste buffer is not disturbed.
  265.  
  266.     "Edit/Insert Row": The contents of all cells below and to the
  267. right of the current cell, including the current cell, are shifted one
  268. row down. The current cell and all the cells in the current row to the
  269. right are made empty.
  270.  
  271.     "Edit/Insert Col": The contents of all cells below and to the
  272. right of the current cell, including the current cell, are shifted one
  273. row to the left. The current cell and all cells below the current cell
  274. are made empty.
  275.  
  276.     "Edit/Delete Row": The contents of all cells below and to the
  277. right of the current cell are shifted one row up. The contents of the
  278. current cell, and of all cells in the current row to the right, are
  279. lost.
  280.  
  281.     "Edit/Delete Col": The contents of all cells below and to the
  282. right of the current cell are shifted one row to the left. The contents
  283. of the current cell, and of all cells in the current column below, are
  284. lost.
  285.  
  286.     Warning: If any cells use RmCn notation with actual cell numbers
  287. in a formula, and the target cell is moved by any insert or delete
  288. operation, then it's likely the formula is now incorrect. The cell name
  289. feature should be used when making references to cells in formulas, as
  290. name references are resolved regardless of cell locations.
  291.  
  292.     "Cells" Menu
  293.  
  294.     "Cells/Edit Cell Text": If the current cell is empty, it is made
  295. a text cell. The Text gadget at the bottom of the window is activated,
  296. as if you had clicked on it. Pressing the 'E' key has the same effect as
  297. "Cells/Edit Cell Text", or if the text gadget is not ghosted you may
  298. simply click on it to edit.
  299.  
  300.     "Cells/Edit Cell Formula": If the current cell is empty, it is
  301. made a formula cell. The Text gadget at the bottom of the window is
  302. activated, as if you had clicked on it. Pressing the 'F' key has the
  303. same effect as "Cells/Edit Cell Formula", or if the text gadget is not
  304. ghosted you may simply click on it to edit.
  305.  
  306.     "Cells/Edit Cell Name": The Name gadget at the bottom of the
  307. window is activated, as if you had clicked on it. Pressing the 'N' key
  308. has the same effect as "Cells/Edit Cell Name", or if the name gadget is
  309. not ghosted you may simply click on it to edit.
  310.  
  311.     "Calculate" Menu
  312.  
  313.     "Calculate/Evaluate": The formulas in the current spreadsheet
  314. are solved, and the results of the calculations are displayed in the
  315. formula cells. This is the way to cause calculation if Auto Calc is
  316. disabled, or if a calculation makes a forward referece to a cell (see
  317. 'order of calculation' above).
  318.  
  319.     "Calculate/Auto Calc": When this entry is checked, the 'auto
  320. calc' feature is enabled. Selecting this entry toggles it's state
  321. between enabled (checked) and disabled (not checked).
  322.  
  323.     "Format" Menu
  324.  
  325.     "Format/Set Column Width": This entry brings up a requester
  326. which allows you to enter the width of the current column, by the number
  327. of characters it should hold.
  328.  
  329.     "Format/Set Decimal Places": This entry brings up a requester
  330. which allows you to enter the number of digits to the right of the
  331. decimal point should be printed for formula cells in the current column.
  332.  
  333.     "Format/Set Normal Font": Selecting this entry causes Spread to
  334. use Topaz/8 for cell display.
  335.  
  336.     "Format/Set Narrow Font": Selecting this entry causes Spread to
  337. use the teeny/8 font for cell display. The teeny/8 font distributed with
  338. Spread uses 5 pixel wide character spacing, which can display up to 128
  339. characters on the 640-pixel Workbench screen, although the border
  340. imagery around the Spread window allows only about 120 characters. If
  341. the 'teeny/8' font is not in your current fonts: directory, this menu
  342. selection will be ghosted.
  343.  
  344.     If you generate your own font and call it teeny/8, or copy
  345. another existing font to teeny/8, then Spread will use it with it's
  346. metrics. It should be an 8 pixel high font, but could be a wider or
  347. narrower font, fixed spacing or proportional. Spread will adjust
  348. accordingly.
  349.  
  350.  
  351. *****************************************************************************
  352.  
  353.  
  354.                                MemoPad 
  355.  
  356.   MemoPad and CheckMemo are products which may be freely distributed 
  357.   on the condition that they are not altered in any way, either by 
  358.   omission or addition to the contents of the ARC file.
  359.  
  360.  
  361.                     Commercial Release Version
  362.                     ==========================
  363.  
  364.   In order to better support users of MemoPad we will be producing a
  365.   commercial version which may be known under a different name -- yet
  366.   to be determined.  Our working name has been MemoPad V2.0.  Due to
  367.   a significant number of changes we may be forced to change the name
  368.   to better describe this new product.  Following is a partial list of
  369.   planned features :
  370.  
  371.     1) An address book facility with an automatic telephone dialer 
  372.        will be added.
  373.  
  374.     2) A daily appointment utility will be supported which allows
  375.        appointments to be booked at selectable intervals.
  376.    
  377.     3) The original MemoPad functions will also be available along
  378.        with a facility to allow batch processing to be invoked via
  379.        a dated and timed memo item.
  380.  
  381.     4) A speech facility will be added to allow memo items or 
  382.        appointments to be announced.
  383.  
  384.     5) More options will be added to give more flexibility in
  385.        selecting screen colours, methods of repeating memos and
  386.        appointments, and in reporting matured items.
  387.  
  388.     6) Text import/export into/from the address book, appointments,
  389.        or memo items will be supported.
  390.  
  391.   Note that although all these additions are planned to appear in the
  392.   commercial release we cannot guarantee that they will operate exactly
  393.   as described above.  Whenever possible we will attempt to improve on
  394.   our offerings and thus the list above may become obsolete.  Please
  395.   contact us at the above address or telephone number to get up to date
  396.   information.   
  397.   
  398.  
  399.                    Installing MemoPad & CheckMemo
  400.                    ==============================
  401.  
  402.   There should be a total of 7 files for this program set.  As soon as
  403.   you invoked `ClickMe', all the names (if they were de-arced) were
  404.   auto-magically expanded out, so you won't have to go through the
  405.   usual hassle of EXECUTING the Execute.Me file that is usual in these
  406.   cases. 
  407.  
  408.   Install MemoPad as follows from the Command Line Interpreter (CLI) :
  409.   (Make certain there is enough disk space to hold the copied files.
  410.    The MemoPad disk icon should be named `MemoPad:'.  Substitute the
  411.    name/directory of the disk which is to hold the MemoPad utility
  412.    in place of the dummy "Working Disk" name).
  413.  
  414.   FROM CLI :
  415.       Copy MemoPad:CheckMemo to C:
  416.       Copy MemoPad:MemoPad#? to "Working Disk"
  417.       Copy MemoPad:CheckMemo#? to "Working Disk"
  418.       Copy MemoPad:ClickMe#? to "Working Disk"
  419.       Copy S:Startup-Sequence to S:Startup-Old
  420.  
  421.   Finally, in order to automatically invoke `CheckMemo' when the
  422.   AMIGA is powered on, invoke your favourite editor to modify the
  423.   following file : S:Startup-Sequence.  Place the line `CheckMemo',
  424.   without the quotes, near the end of this file, just before the
  425.   line containing `EndCLI > Nil:'.
  426.  
  427.   Note: you can also manually check the memo items at any time simply
  428.   by typing `CheckMemo' from CLI or by clicking on the CheckMemo icon.
  429.   If nothing happens except a disk access when you invoke CheckMemo,
  430.   don't worry -- it just means that no memo items were found for
  431.   today's date.
  432.  
  433.   The MemoPad utility, which creates the memo items read by CheckMemo,
  434.   was placed on your working disk as part of the installation.  It is
  435.   also possible to just drag the MemoPad icon over to your working
  436.   disk.
  437.  
  438.                           MemoPad Operation
  439.                           =================
  440.  
  441.   MemoPad is a WorkBench utility which runs in a separate window on
  442.   the WorkBench screen. It is capable of allowing you to generate memo
  443.   items which are simply dated reminders of appointments, birthdays,
  444.   holidays, or any to do list.  Each memo item can be any length, 
  445.   limited only by the amount of memory or disk space where the memos
  446.   are stored.
  447.  
  448.   When MemoPad is first invoked, it searches the S: startup directory 
  449.   for a file called MEMOPAD.DAT.  This file contains all the memo items
  450.   which have been entered by yourself.  Naturally, the first time it is
  451.   invoked, MemoPad won't find this file and will attempt to create one.
  452.   At this time, you may get a message indicating that the WorkBench
  453.   disk is required or that you should unprotect the write tab.  
  454.  
  455.   During start-up, one other file is accessed : MEMOPAD.CUS.  This file
  456.   contains user customization information which allows you to customize
  457.   the MemoPad operation to your individual preferences via the 
  458.   CUSTOMIZE menu selection in MemoPad.  If this file is not found, 
  459.   MemoPad makes some assumptions and gives you a 24-hour clock, a 
  460.   day-month-year date, and a plain MemoPad title.  Naturally, you can 
  461.   customize all these parameters and the next time MemoPad is invoked,
  462.   all your selections will be used.  By the way, the same selections 
  463.   will also be used by CheckMemo.
  464.  
  465.  
  466.                   Changing the Data File Directory
  467.                   ================================
  468.  
  469.   We felt that everyone would have WorkBench in their drive during 
  470.   startup, so this is where MemoPad normally assumes it will find your
  471.   memo items.  If you don't like these files on your WorkBench disk, 
  472.   then it is possible to change the directory where MemoPad will look.
  473.   device to some other disk.  MemoPad and CheckMemo both accept an
  474.   optional parameter on the command line which is the directory which
  475.   they will use in place of the default S: directory.  To change from
  476.   the default simply edit the S:Startup-Sequence file again, replacing
  477.   the `CheckMemo' line with `CheckMemo DIRECTORY', where DIRECTORY is
  478.   replaced by a directory or device string.  As an example, if we wish
  479.   the MemoPad files to be placed on our working disk, WORK:, and in 
  480.   the MemoFiles directory, we would enter `CheckMemo WORK:MemoFiles'
  481.   into the S:Startup-Sequence file.  Whenever invoking MemoPad, you
  482.   will also have to remember to specify the new directory in the
  483.   CLI invocation line, so for our example, we would type :
  484.   `MemoPad WORK:MemoFiles'.
  485.  
  486.   If invoking MemoPad and/or CheckMemo from the WorkBench, simply edit
  487.   the INFO file from the corresponding WorkBench menu, after having
  488.   selected either the MemoPad or the CheckMemo icon, and place the 
  489.   desired new directory specification as the first item in the 
  490.   `Tool Types' string gadget.  Thus our example from above would
  491.   require that the default tool type entry of `MEMODIR=S:' be 
  492.   changed to read the following instead : `MEMODIR=WORK:MemoFiles'.
  493.   Don't include the quotes.  Be sure to do this for both the MemoPad
  494.   and CheckMemo icons.
  495.  
  496.  
  497.                         Operating Instructions
  498.                         ======================
  499.  
  500.   Creating a Memo Item
  501.   --------------------
  502.   Click on the ENTER button to create a memo item.  The total number
  503.   of memos should increase by one and the newly created item will be
  504.   automatically assigned today's date.  The comment field will be
  505.   blank.  To enter some text, just point to the line where the text
  506.   is to be placed and click with the left mouse button.  Then type
  507.   the memo text.  A RETURN will automatically take you to the next
  508.   line of the comments.  
  509.  
  510.   Comments longer than five lines can be created by clicking on the
  511.   down arrow under the comment scroll bar.  The scroll bar will reduce
  512.   to half its original size.  The text which is displayed represents
  513.   those five memo lines located in the scroll bar range.  Thus, if
  514.   we created a new page of comments, we now have a total of ten 
  515.   comment lines available for this memo item.  The scroll bar's
  516.   position illustrates where we are within this ten line range.  By
  517.   clicking on the down arrow repeatedly, additional comment pages in
  518.   multiples of five lines are created.  New pages are created as soon
  519.   as the scroll bar reaches the bottom of its container and the down
  520.   arrow is clicked.  The only limitation to the comment size is the 
  521.   amount of memory available.  A help message will let you know when
  522.   you run out of memory.
  523.  
  524.   The up and down arrows work in cooperation with the scroll bar to
  525.   advance the comment window up or down by a single line of text.
  526.   Click on the up arrow to move up a line and click on the down arrow
  527.   to move down a line.  Pages of five lines are traversed by clicking
  528.   just within the scrolling container either under the scroll bar to
  529.   move down five lines or above the scroll bar to move up by five
  530.   lines.
  531.  
  532.   A trailing blank page of comment lines is automatically deleted once
  533.   it is no longer visible.  The scroll bar also changes its size 
  534.   and position to reflect the reduced number of comment lines. 
  535.   Blank page deletion occurs either when the scroll bar is dragged to
  536.   the top of the scroll container or repeated clicks on the up arrow
  537.   cause the blank page to scroll off the comment area.
  538.  
  539.  
  540.   Viewing Memo Items
  541.   ------------------
  542.   The date window, which normally is used to set a memo item's date,
  543.   can also be used to display all the memo items for a given month.
  544.   Just click on the VIEW button and all memo items for the current
  545.   month will be highlighted in the date window.  Any dates with more
  546.   than one item will be outlined.  To see the contents of one of 
  547.   these memo items, just click on the highlighted date.  The related
  548.   memo item will be displayed in the main window. (You may have to
  549.   move or QUIT the date window in order to see the full memo text.)  
  550.   Multiple memos on a single date are displayed in a similar manner.
  551.   Once the first memo item has been shown, the MORE button in the
  552.   date window will light up to indicate that additional items are
  553.   available.  Click on the MORE button to see these memos one at a
  554.   time.
  555.  
  556.  
  557.   Printing Memo Items
  558.   -------------------
  559.   The Print menu options give printer output from all the memo items or
  560.   just the memo currently being displayed.  By displaying only selected
  561.   items, then invoking the single memo print option from the menu, it
  562.   is possible to selectively print only those memos due for a single
  563.   day.  The amount of space on the left of the printed memo items can
  564.   be altered by adjusting the printer left margin from within
  565.   Preferences.  Make certain that the right margin is adjusted so that
  566.   sufficient space is available on the print line to contain a full 
  567.   line of comment text.
  568.  
  569.  
  570.   Repeating Memo Items
  571.   --------------------
  572.   MemoPad lets you specify repeated memo items which occur fairly 
  573.   regularly on a daily, weekly, monthly, or annual basis for a fixed
  574.   length of time.  To generate such a memo item, first you'll have to
  575.   enable repeats by selecting one of the repeat choices in the REPEAT
  576.   MEMO menu list. By default, repeats will be disabled as is shown by
  577.   the checkmark in front of the "No Repeat" menu item.  Choose one of
  578.   the repeat options and use the NEXT or PREV buttons to get to the
  579.   memo you wish to have repeated.  Click on the DATE button, and use
  580.   the Date Window controls to get to the starting date to be repeated.
  581.   Click on the desired date.  All repeated dates will now also be
  582.   selected.  Use the Date Window controls to check them if you don't
  583.   believe it could be that easy.  Click on the OK button to close the
  584.   Date Window and accept the chosen date; otherwise, just click on
  585.   the QUIT button to keep whatever date was originally on your memo
  586.   item.
  587.  
  588.   
  589.   Finding a Dated Item
  590.   --------------------
  591.   The FIND button and the related menu item will let you find one memo
  592.   out of the list of memo items which you have defined.  Click on this
  593.   button, use the Date Window controls to maneuver to the desired date,
  594.   and click on the date to be found.  Click on the OK button and the
  595.   first memo item with this date will be located and displayed.  This
  596.   date search may be cancelled by clicking on the QUIT button.  If the
  597.   date is not found, a message indicating this will be displayed in the
  598.   Help Window.  A trick, which may be used to find any memo item in
  599.   a given month might be to select the daily repeat for a month before
  600.   clicking on the Date button.  Any date which is selected will now
  601.   cause a search throughout the entire repeat range for any matching
  602.   memo item dates.
  603.  
  604.  
  605.   Help Window
  606.   -----------
  607.   The Help Window is a context sensitive help feature which displays
  608.   help messages as various buttons and/or menu selections are made.
  609.   It is located in the top rightmost portion of the MemoPad window.
  610.  
  611.  
  612.   Automatic Memo Item Backup
  613.   --------------------------
  614.   There is never any need to worry whether or not all your memo items
  615.   have been saved to disk!  MemoPad will automatically update the disk
  616.   file, as soon as it notices that some memo item has been changed.
  617.   Even if some other program should cause the AMIGA to crash in a 
  618.   shower of fireworks, you'll be secure in the knowledge that your
  619.   memo items are safe.
  620.  
  621.  
  622.                         About the Modula-2 Source
  623.                         =========================
  624.  
  625.   We, as a company, provide the source code for MemoPad and CheckMemo
  626.   primarily to give interested individuals the tools for programming
  627.   the Amiga using the Intuition-based interface in Modula-2.  Included
  628.   in the source are many examples of gadget-based control, menu 
  629.   initialization and use, window creation and manipulation, and 
  630.   requester window use. Although bits and pieces of what we do are 
  631.   available in other programs, we feel that having an example which
  632.   unites all the working principles required to produce a full program
  633.   is beneficial to novice AMIGA programmers.  Our primary aim, of 
  634.   course, was to produce a program from which others could see how to
  635.   work within an Intuition-based environment using Modula-2; and in 
  636.   this respect, we feel that we have succeeded.
  637.   
  638.   
  639.                             Acknowledgements
  640.                             ================
  641.  
  642.   As always, there are a bunch of people behind the scenes who must be
  643.   thanked for their contributions, either direct or indirect, to a 
  644.   program such as this.  Firstly, thanks to TDI for their Modula-2
  645.   compiler, which may not be fastest or the best, but it certainly was
  646.   the first.  Secondly, thanks to all the people who have contributed
  647.   public-domain programs to demonstrate Modula-2 concepts and give 
  648.   others source code examples upon which to build.  In particular,
  649.   thanks to Richie Bielak for his FastTextIO routines, used in this
  650.   previewer and thanks also go to Jerry Mack for his TextTools module
  651.   used in MemoPad. We also appreciate the artistic talents of Anna Lise
  652.   Scheel, Colour Consultant, for her work on MemoPad.  Thanks also to
  653.   all the Beta test sites (you know who you are) for their assistance
  654.   and helpful comments.  Thanks also to the people who brought us
  655.   PowerWindows which was used as a starting point for the design of
  656.   windows, gadgets, menus, and requesters used in both MemoPad and
  657.   CheckMemo.  Although, the Modula-2 extensions to this program are
  658.   VERY buggy and have been given inadequate thought, the tool has been
  659.   useful. Finally, thanks to the makers of the Amiga -- without whom
  660.   none of this would have been possible.
  661.  
  662.  
  663.                                Bug Fixes
  664.                                =========
  665.  
  666.   Much as we hate to admit it, a few bugs crept into the V1.0 release
  667.   of MemoPad and CheckMemo.  Thanks to the people who pointed out the
  668.   bugs (people tend to do that).  All known bugs as listed below have
  669.   been exterminated :
  670.  
  671.      Bug 1.0-1  The programs stomped over memory location 00000000
  672.                 while starting up and initializing the Date window.
  673.                 Although this bug didn't usually cause the programs
  674.                 to crash, sometimes, if another program depended on
  675.                 something in memory location 00000000, a crash could
  676.                 occur.  As a matter of fact, if both MemoPad and
  677.                 CheckMemo were running together (yes, they can do
  678.                 that too), closing down one would cause the other
  679.                 one to crash the Amiga.  In our defense, the bug
  680.                 was traced to a pointer to a pointer which the
  681.                 current V3.0a TDI Modula-2 compiler doesn't seem to
  682.                 handle very well.  PowerWindows forced us to use
  683.                 the awkward pointer to a pointer syntax (they must
  684.                 be `C' programmers!), hence our memory stomping.
  685.  
  686.      Bug 1.0-2  To our shock, we discovered that the DOS date was 
  687.                 in error by one day (at least during this leap year).
  688.                 It worked fine last year. ;-)
  689.                 A new algorithm is now being used.
  690.  
  691.   To date no bugs have been reported for MemoPad V1.1.  Please let
  692.   us know if you find any in this V1.2 release.
  693.    
  694.                 
  695.                         About Computer Inspirations
  696.                         ===========================
  697.  
  698.   Although COMPUTER INSPIRATIONS is fairly new to the AMIGA and other 
  699.   personal computers, we have gained considerable experience in 
  700.   software and hardware development from work in the aerospace industry
  701.   and from a university environment.  We are committed to bringing 
  702.   quality products to AMIGA owners at affordable prices.  We will make
  703.   certain that all our products reflect this attention to detail and
  704.   we will respond promptly to any customer problems or concerns.
  705.  
  706.   Michael Griebling,
  707.   President, COMPUTER INSPIRATIONS
  708.  
  709.  
  710.  
  711.  
  712. *****************************************************************************
  713.  
  714.  
  715.  
  716.  
  717.                         USER'S GUIDE TO DWIP
  718.                         ====================
  719.  
  720. ACKNOWLEDGEMENT: DWIP is heavily based on the jiff and plop programs by
  721. Jim Kent.  Many thanks to Jim for writing a well-documented IFF file
  722. reader/displayer.  This program would have taken me months to write
  723. without his code, instead of the two days that it actually took.
  724.  
  725. INTRODUCTION:
  726.     DWIP stands for "Daisy Wheel IFF Printer", and it is intended as a
  727. general-purpose IFF file printing utility for Amiga users who either
  728. (1) want to do graphics on their daisy wheel printer; or (2) just want
  729. to quickly make very large dumps of their IFF files.
  730.     While it is true that most screen dump utilities will allow the user
  731. to blow up his image as large as he likes, it is generally impractical
  732. to blow up images to a very large size because of the time involved
  733. (not to mention expense in printer ribbons and wear&tear on your printer).
  734. I wrote DWIP because I wanted to create large banners quickly of files I
  735. had created on my Amiga.  (Note that I use the word "quickly" in a relative
  736. sense.  I think DWIP is about as quick as you can possibly get in making
  737. screen dumps with standard printers, but it still takes awhile to print
  738. a screen.)
  739.     First, the good news: DWIP works with just about ANY printer.  It
  740. just uses standard text characters, overstriking them in varying amounts
  741. to make different shades of grey.  It does overstriking by first sending
  742. one entire line of characters, then a carriage return code (CR), followed
  743. by another line of characters and another until the desired darkness is
  744. achieved (up to 5 passes for the darkest shade).  It only sends a line 
  745. feed code (LF) when it is done with all passes over a given line.  This 
  746. is in keeping with the way the Amiga operates, sending out only a LF at 
  747. the end of a line, which returns the carriage to its home position and 
  748. also moves the roller forward one line.
  749.     In normal operation, the Amiga doesn't use the CR at all, but most
  750. printers use the CR only to return the carriage without moving the
  751. roller.  However, some will move the roller as well when they get a CR,
  752. and in that case DWIP will not work properly with the default settings.
  753. Here's what you should do to test DWIP:  There is a "test" mode, which you
  754. invoke by typing:
  755.  
  756. DWIP -z
  757.  
  758. This will produce a file starting with the letters DW and having four
  759. more characters after that, in your RAM: directory.  You can print that
  760. file on your printer, as in:
  761.  
  762. copy RAM:filename to prt:
  763.  
  764. What you should see is five lines, each one having 36 characters in it.
  765. (Actually, there are many more characters than that, but the ones toward
  766. the left should be overstruck to produce dark rectangles over the letter
  767. positions.)  The five lines should all be identical and single-spaced, 
  768. and they should look nearly black on the left and nearly white on the 
  769. right.  This is the DWIP grey-scale.
  770.     If your test pattern doesn't look like this, chances are you're
  771. looking at about 25 lines of output instead of 5.  In that case, your
  772. printer is moving the roller with every carriage return code.  I would
  773. recommend checking your printer manual at this point, and see if there
  774. is a dip switch that controls the treatment of carriage returns.  Disabling
  775. automatic linefeeds with every carriage return should make DWIP work
  776. properly, without affecting the normal operation of your printer with the
  777. Amiga.  If you can't find such a dip switch on your printer, or if moving
  778. it affects your other printing with the Amiga, then there is one other
  779. possibility.  There is a "universal printer" option on DWIP (-u) which
  780. you can try.  It works by sending a bunch of backspaces at the end of
  781. each line, instead of a CR, so there's a chance this might work with your
  782. printer.  (Actually, this option isn't as universal as I had intended,
  783. since some printers don't seem to backspace a full character width and
  784. the result is a real mess.)  To try this option, use:
  785.  
  786. DWIP -z -u
  787.  
  788. and then use the copy command to print out the resulting file.  (It will
  789. have a different name from the first one.)  And if this doesn't give the 
  790. 5-line test pattern I described above, you're out of luck.  DWIP doesn't 
  791. work with your printer.
  792.  
  793.     Now on to continue with the good news:
  794.  
  795.     A dot matrix printer will work just as well as a daisy wheel 
  796. printer.  I named DWIP for daisy wheels because this is the only graphics 
  797. printing utility I know of for the Amiga that also works on daisy wheel 
  798. printers.
  799.     Also in the realm of good news, I'll tell you that DWIP has many
  800. options, allowing you to print any part of the screen on printers of
  801. any carriage width, either normal or sideways.  It can even be used as
  802. a quick-and-dirty slide-show program (although it doesn't do fancy things
  803. like scrolls, fades or dissolves).
  804.     Finally, DWIP can blow up a picture as large as you like, including
  805. generating more than one character on your printer per dot on the screen.
  806. That means you can make some very large banners from your IFF files,
  807. although of course you'll have to do some pasting as soon as you go
  808. beyond the width of your printer.  (However, DWIP has a sideways printing
  809. option so you can print very long images in a single pass.)
  810.     Now for the bad news: First of all, DWIP doesn't do color.  It
  811. approximates the colors of the screen as shades of grey (you have control
  812. over that, too).
  813.     Second, DWIP doesn't currently support all the IFF file formats.  It
  814. is limited to low-resolution, non-HAM screens.  (No interlace, overscan,
  815. PAL, high-resolution, or HAM files will work.)  Third, it doesn't run from
  816. the workbench; you have to run it from the CLI.
  817.  
  818. USING DWIP
  819. ==========
  820.     The format for starting DWIP from the CLI is as follows:
  821.  
  822. DWIP [options] files
  823.  
  824. There are many options in DWIP, and any or all may be used in combination.
  825. All options consist of a minus sign (-) and a one-letter code.  In addition,
  826. many codes are followed by a number (annotated as "val" below) or a
  827. string of characters (annotated as "string" below).  Here is a summary of 
  828. all the options:
  829.  
  830.     -lval      set leftmost location on screen (default 0)
  831.     -tval      set top location on screen (default 0)
  832.     -wval      set width of screen area to print (default 320)
  833.     -hval      set height of screen area to print (default 200)
  834.     -pval      set printer pitch (default 10)
  835.     -cval      set # columns to use across printer (default 135)
  836.     -nval      set # lines per inch on printer (default 6)
  837.     -istring   set initialization string (default is none)
  838.     -estring   set end-of-line string (default is newline)
  839.     -u         "universal" printer option (use backspaces instead of CR)
  840.     -ofile     send output to named file (default is PRT:)
  841.     -s         print sideways
  842.     -m         "modified" picture (inverse intensity)
  843.     -rval      set red relative intensity (default 1.0)
  844.     -gval      set green relative intensity (default 0.7)
  845.     -bval      set blue relative intensity (default 1.0)
  846.     -vtime     view file for time seconds, instead of printing
  847.     -z         print a test pattern (after any named files)
  848.  
  849. The default for DWIP is to make a copy of the entire screen on the printer
  850. using 135 columns (standard wide-carriage printer in 10-pitch).  To zoom 
  851. in on a smaller portion of the screen, you have to specify the coordinates
  852. of the left, top corner of the area you want, as well as the width and
  853. height of the area.  For instance, if you wanted to print an area beginning
  854. 110 dots (pixels) in from the left edge of the screen, 200 dots wide,
  855. and beginning 50 dots from the top edge of the screen, 100 dots high,
  856. of an IFF file named "myfile", you would start DWIP with the command:
  857.  
  858. DWIP -l110 -w200 -t50 -h100 myfile
  859.  
  860. DWIP IS case-sensitive, so be sure to use lower-case letters on the options.
  861. File names are the same as standard AmigaDOS, so case doesn't matter there.
  862.     To complicate matters, let's say you only have an 80-column printer.
  863. Then you would have to use the -c parameter to set the number of columns,
  864. as in:
  865.  
  866. DWIP -l110 -w200 -t50 -h100 -c80 myfile
  867.  
  868.     Or suppose your printer prints in 12 pitch, instead of 10 (which DWIP
  869. assumes).  You can specify the pitch with the -p parameter, as in: -p12
  870.     Or suppose your printer had a compressed printing mode that let you
  871. put 120 characters across a standard 8" printing area.  Then you'd need
  872. the -c parameter (-c120), but you'd also need to change the pitch. Pitch 
  873. is just the number of characters per inch, so you have 120 / 8 = 15.
  874.     You can also change the vertical pitch (the number of lines per inch)
  875. with the -n parameter.  The default is 6 (as in 66 lines / 11 inches),
  876. the standard for nearly all printers, but you can easily change this.
  877.     You will notice that although DWIP gives you direct control over the
  878. width of the picture you will produce (via the -c parameter), you do not
  879. have control over the length of the picture produced.  DWIP automatically
  880. selects a picture length to keep the aspect ratio of the screen as nearly
  881. as possible.
  882.  
  883.     The output file name DWIP chooses is intended to be a "unique" name.
  884. So it makes up a name that doesn't already exist in the RAM: directory
  885. and uses that.  If you use DWIP several times, you have to be careful
  886. to delete these files or they'll pile up because DWIP never overwrites
  887. these files.  The alternative is for you to explicitly tell DWIP the file
  888. name you'd like your output to go to.  Use the -o option, and you can
  889. send the file anywhere you like.  For instance, you can send the output
  890. to a file call "myoutput" on your hard drive with a command like:
  891.  
  892. DWIP -odh0:myoutput [options] myfile
  893.  
  894. You can even specify "prt:" as the output file, and then Dwip will
  895. automatically print it for you and you can skip the intermediate-file
  896. step.  I don't really recommend this, however, since you can't stop
  897. Dwip once it starts printing.  This is true if you try to stop it, or 
  898. if your printer goes offline and the familiar "Printer Trouble" requester 
  899. appears.
  900.     Since Dwip itself is pretty fast, and the only slow step is the
  901. actual printing, you may want to do that step in the background, as in:
  902.  
  903. run c:copy RAM:file to prt:
  904.  
  905. By using the 'run' command, you can then go on and do other things
  906. while the file is printed.
  907.  
  908.     DWIP prints color pictures by estimating the brightness of each
  909. different color.  The basic idea is to add the red, green and blue
  910. components of the color.  This would yield a number in the range from
  911. 0 (black) to 45 (white) since each of the RGB components has a range
  912. from 0 to 15.  However, I have made the observation that the green 
  913. color on the Amiga is somewhat lighter than the red or the blue.  You 
  914. can see this very easily in Preferences by creating a screen with full 
  915. green color and no red or blue, and comparing it to the corresponding 
  916. red and blue full colors.  Therefore, I call the red and blue "full 
  917. darkness" colors, but green is only about 70% as dark.  Note that I 
  918. speak of darkness, not lightness.  That's because DWIP starts with a 
  919. white sheet of paper and adds darkness to the dots to create a picture.
  920.     If you disagree with my choices, you can easily change them yourself.
  921. The -r, -g and -b parameters allow you to enter a decimal number (between
  922. 0 and 1) corresponding to the percentage of darkness for each component.
  923. The default is 100% (1.0) for red and blue, and 70% (0.7) for green.
  924. To give equal weighting to all three colors, just use -g1.  You can
  925. effectively darken the entire picture by setting numbers slightly greater
  926. than 1 for the 3 parameters, or lighten it by using numbers less than 1
  927. (but never less than 0).
  928.     By default, DWIP sends no initialization string to the printer and
  929. only a linefeed character at the end of each line.  You can change each
  930. of these, to suit the needs of your printer.  For instance, you may want
  931. your printer to do a form feed before each picture, or you may want it
  932. to send an escape code to change the printer pitch.  The format for
  933. specifying an initialization string is -istring where "string" is any
  934. string of characters.  You can embed non-printing ASCII codes by
  935. specifying them in the form \nnn where nnn is a 3-digit decimal number
  936. for the ASCII code.  (NOTE, C programmers, that even with a leading zero
  937. this number is decimal, NOT octal!)  For instance, you can tell DWIP to 
  938. send a form feed (ASCII code 12) before every picture by using:
  939.  
  940. DWIP -i\012 myfile
  941.  
  942. Note that all three digits (012) must be specified.  Or if you need to 
  943. send an escape, left-bracket ([), and 't' you would use:
  944.  
  945. DWIP -i\027[t myfile
  946.  
  947.     You can set the end-of-line code sent by DWIP in the same manner.
  948. By default, DWIP sends only a linefeed code (ASCII 10), but with the -e
  949. option you can specify any string you like.  Note that here I am talking
  950. about what DWIP does AFTER all overstriking is complete; only the -u
  951. option discussed above affects what is done DURING overstriking.
  952.     You can print sideways by using the -s flag, or you can "invert" the
  953. image with the -m (modify) flag.  By "invert", I mean printing the
  954. negative of the image, exchanging dark for light as in a photo negative.
  955. (This option really should have been flagged as -i or -n, but both of
  956. those letters were already being used for other options, so I was stuck
  957. with -m.  Such are the perils of the English language. :<] )
  958.     Finally, if you use the -v option you can make DWIP act like a simple
  959. slideshow utility.  The number after the v is the number of seconds to
  960. pause before bringing up the next picture.  For instance:
  961.  
  962. DWIP -v10 file1 file2 file3
  963.  
  964. would display each of the 3 files in succession, pausing 10 seconds
  965. between each one.  This option stops any printing from being done at
  966. all; it is strictly for viewing files.
  967.     One final note: all parameters to DWIP are order-dependent; they
  968. are evaluated as they are encountered, and can be placed in whatever
  969. order is logical for your situation.  You can set and reset parameters
  970. in a single command line.  For instance, you could do something like:
  971.  
  972. DWIP -l20 -w200 -c80 -ofilout1 myfile1 -l120 -t100 -ofilout2 myfile2
  973.  
  974. This would use two different output files, with the picture for myfile1
  975. being sent to filout1 and the picture for myfile2 sent to filout2.  The
  976. -s and -m parameters are toggles, incidentally.  Using them once in a
  977. command turns the option on; using them again turns them off, and so on.
  978.  
  979. Happy printing! (:<)
  980.  
  981. *****************************************************************************
  982.  
  983.  
  984.  
  985.  
  986.                            Keyclick version 1.1
  987.  
  988.  
  989.      One thing I always missed about the Amiga was an audio click when the
  990.  
  991. keys were pressed.  While the Amiga keyboard has the best feel of any I've
  992.  
  993. typed on, it doesn't have a form of audio feedback, which aids in
  994.  
  995. touch-typing.  Thanks to the multitasking operating system however, the
  996.  
  997. addition of such a feature is relatively painless, both from a user's and a
  998.  
  999. programmer's standpoint.
  1000.  
  1001.      Upon running the program, a window will be presented which contains
  1002.  
  1003. two gadgets.  The slider is used for adjusting the volume of the click.  The
  1004.  
  1005. toggle switch can be "pressed" to turn the sound on or off.  After the
  1006.  
  1007. program is up and running, an audio click will be produced at each press of
  1008.  
  1009. a key on the keyboard or a mouse button.  You cannot run more than one key
  1010.  
  1011. clicker at a time; the second clicker that you run will indicate that a
  1012.  
  1013. key-clicker is already active in the system.  Simply close the window to
  1014.  
  1015. end the program.  That's about all you have to know as a user.
  1016.  
  1017.      For you programmers out there...  This program demonstrates custom
  1018.  
  1019. input handlers and effectively sharing the complicated audio device; two
  1020.  
  1021. concepts that can be put to great use.
  1022.  
  1023.      The center of activity revolves around a custom input handler, which
  1024.  
  1025. simply signals the waiting task when a key or mouse button event arrives in
  1026.  
  1027. the input stream.  Once the task is awakened, it sends a command to the
  1028.  
  1029. audio device to initiate the click and goes back to sleep. Therefore, this
  1030.  
  1031. program only uses a significant amount of processor time when a key or
  1032.  
  1033. mouse button is actually pressed.
  1034.  
  1035.      I had the program set its own priority to fourty (this can be changed
  1036.  
  1037. by assigning a different value to TASK_PRIORITY, defined at the beginning
  1038.  
  1039. of the program) for better response.  At lower task priority values, the
  1040.  
  1041. program tended to be sluggish on occasion (especially in a busy system).
  1042.  
  1043. The input handler priority (defined by HANDLER_PRIORITY) is set at
  1044.  
  1045. fifty-one.  This causes events from the input stream to be intercepted
  1046.  
  1047. before Intuition gets ahold of them.  This is desirable because Intuition
  1048.  
  1049. "swallows" some of the events.  That is, it removes some of them from the
  1050.  
  1051. input stream, preventing the custom input handler from notifying the
  1052.  
  1053. clicker task.
  1054.  
  1055.      At each stroke of a key, an audio channel is allocated, a sound
  1056.  
  1057. request is issued to the audio device, and the channel previously allocated
  1058.  
  1059. is freed.  All of this takes place within the click() routine.  After a
  1060.  
  1061. channel is allocated (via a call to get_audio_channel()), the io_Unit
  1062.  
  1063. parameter is checked to see if an allocation actually succeeded.  A zero in
  1064.  
  1065. this parameter indicates that no channel could be allocated.  If this is
  1066.  
  1067. the case, the click() routine returns immediately without attempting to ask
  1068.  
  1069. the audio device to make a click sound.  Any other value in io_Unit denotes
  1070.  
  1071. which channel has been allocated for use.  The IOAudio structure is
  1072.  
  1073. prepared for a CMD_WRITE to issue a sound request to the audio device, and
  1074.  
  1075. is executed with a call to BeginIO().  A WaitIO() call is immediately
  1076.  
  1077. issued after the BeginIO() so the program waits until completion of the
  1078.  
  1079. write request.  This is needed to delay freeing the channel until the click
  1080.  
  1081. sound is completed playing (after WaitIO() returns, a call to
  1082.  
  1083. free_audio_channel() frees the previously allocated audio channel).
  1084.  
  1085.      An alternate method of audio manipulation would be to allocate an
  1086.  
  1087. audio channel at the beginning of the program and set it to the highest
  1088.  
  1089. possible priority (127) to prevent it from being stolen by other tasks
  1090.  
  1091. requiring audio channels.  However, this method does not take full
  1092.  
  1093. advantage of the audio device's sophistication; it must be remembered that
  1094.  
  1095. in a multitasking environment you have to share resources.  Allocating and
  1096.  
  1097. "holding on" to an audio channel is very uncooperative (and selfish!).
  1098.  
  1099.      The in-line assembly language at the end of the C source code is an
  1100.  
  1101. input handler interface, which is required for the system to "communicate"
  1102.  
  1103. with the custom input handler.  In other words, it copies the appropriate
  1104.  
  1105. system registers (A0 and A1) to the stack to conform with the input handler
  1106.  
  1107. calling convention.  This is absolutely essential if the system is to work
  1108.  
  1109. correctly with the custom input handler.
  1110.  
  1111.      I would like to hear your comments on this program.  Feel free to
  1112.  
  1113. E-Mail me on GEnie (MMD) or Delphi (MOCKO).
  1114.  
  1115.  
  1116.      Note- a simplified version of this program (V1.0) can be found in the
  1117. November 1988 issue of Amazing Computing.  The program as it appears in
  1118. print statically allocates an audio channel, therefore preventing any other
  1119. task in the system from allocating (stealing) it.  This version of the
  1120. program dynamically allocates an audio channel at a priority of -90 each
  1121. time a key is pressed, and works well with other tasks using the audio
  1122. device (at least with my experiences).  This version also adds a toggle
  1123. switch to enable the user to prevent the program from clicking if so
  1124. desired.  If any problems are encountered in using this program, I'd like
  1125. to know so I can upload updated versions. Thank you. -Mike
  1126.  
  1127.  
  1128.  
  1129. *****************************************************************************
  1130.